import { get, post, put, del, patch } from './api';
import { Task, TaskQueryParams } from '../pages/taskboard/models/taskModels';

// API响应类型
interface ApiResponse<T> {
  code: number;
  message: string;
  data: T;
}

/**
 * 创建任务
 * 
 * @param data 任务数据
 * @returns 创建的任务
 */
export async function createTask(data: Partial<Task>) {
  return post<ApiResponse<Task>>('/tasks', data);
}

/**
 * 更新任务
 * 
 * @param id 任务ID
 * @param data 任务数据
 * @returns 更新后的任务
 */
export async function updateTask(id: number | string, data: Partial<Task>) {
  return put<ApiResponse<Task>>(`/tasks/${id}`, data);
}

/**
 * 更新任务状态
 * 
 * @param id 任务ID
 * @param status 任务状态
 * @param updater 修改人
 * @returns 更新后的任务
 */
export async function updateTaskStatus(id: number | string, status: string, updater?: string) {
  const url = `/tasks/${id}/status?status=${status}`;
  if (updater) {
    return patch<ApiResponse<Task>>(`${url}&updater=${updater}`);
  }
  return patch<ApiResponse<Task>>(url);
}

/**
 * 获取任务详情
 * 
 * @param id 任务ID
 * @returns 任务详情
 */
export async function getTaskById(id: number | string) {
  return get<ApiResponse<Task>>(`/tasks/${id}`);
}

/**
 * 删除任务
 * 
 * @param id 任务ID
 * @returns 删除结果
 */
export async function deleteTask(id: number | string) {
  return del<ApiResponse<void>>(`/tasks/${id}`);
}

/**
 * 查询任务列表
 * 
 * @param params 查询参数
 * @returns 按状态分组的任务列表
 */
export async function searchTasks(params: TaskQueryParams) {
  return get<ApiResponse<Record<string, Task[]>>>('/tasks/search', params);
}

/**
 * 获取当前用户的任务
 * 
 * @param username 用户名
 * @returns 按状态分组的任务列表
 */
export async function getMyTasks(username: string) {
  return get<ApiResponse<Record<string, Task[]>>>('/tasks/my-tasks', { username });
}

/**
 * 根据titleIndex查询任务
 * 
 * @param titleIndex 任务唯一标识
 * @returns 任务详情
 */
export async function getTaskByTitleIndex(titleIndex: string) {
  return get<ApiResponse<Task>>(`/tasks/by-title-index/${titleIndex}`);
}

/**
 * 查询子任务列表
 * 
 * @param parentId 父任务ID（即父任务的titleIndex）
 * @returns 子任务列表
 */
export async function getChildTasks(parentId: string) {
  return get<ApiResponse<Task[]>>(`/tasks/child-tasks/${parentId}`);
} 